<template>
	<view >
		<view class="container">
		  <view class="info-card">
		    <view class="item-field">
		      <text class="label">货品名称:</text>
		      <text class="value">{{ data.name }}</text>
		    </view>
			<view class="item-field">
			  <text class="label">货品数量:{{totalCount}}</text>
			  <!-- <text class="value">{{totalCount}}</text> -->
			</view>
			<view class="item-field">
				<text class="label">输入数量:</text>
				<input type="text" @input="handleInput" :value="inputValue" />
			</view>
		</view>
		</view>
		<view class="button-container">
		  <button @click="handleConfirm">确定</button>
		</view>
	</view>
	
	
	
</template>

<script>
	import * as SupplierSendOrderApi from '@/api/suppliersendorder/inde.js';  // 随货同行单
	import * as SecStockrApi from '@/api/secStock/index.js'; 				  // 二级库库存
	import * as  secAccountApi from'@/api/secAccount/index.js';				  // 二级库台账
	import * as wareApi from '@/api/warehouseoutlist/index.js';   // 出库单
	export default { 
	  data(){
		return {
			totalCount: '',
			resultString: '', // 用于保存生成的uuid
			inputValue: '',   // 商品总数
			data: {},         // 传递过来的单品信息
			listdata: [],     // 根据商品部门id查询库存信息 
			upTotalCount: [],
			 myObject: {outId: ''}
	  
		};
	  },
	  onLoad(options){
		    const dataStr = options.data;
		    // 将 JSON 字符串解析回对象
		    this.data = JSON.parse(dataStr); 
			this.getList(); 
			this.generateString();
	  },
	  methods:{
		async getList() {
			try {
				console.log('传递的data数据',this.data);
				this.listdata = await SecStockrApi.getDeptSecStock(this.data.id);
				console.log('查询到的所有商品',this.listdata.data);
				// 使用 reduce 方法计算 count 的总和
				this.totalCount = this.listdata.data.reduce((sum, item) => sum + item.count, 0);
				
				console.log('货品数量',this.totalCount); // 输出结果
			} finally {
			  // 这里可以添加一些清理代码，如果需要的话
			}
			
		},
	    handleInput(event) {
	      let value = event.target.value;
	      // 只允许输入数字
	      value = value.replace(/\D/g, '');
	      // 不能大于 totalCount
	      if (parseInt(value, 10) > this.totalCount) {
	        value = this.totalCount.toString();
	      }
	      this.inputValue = value;
	    },
		async handleConfirm(){
			if (this.inputValue > this.totalCount) {
				uni.showToast({
					title: '核销数量不能大于库存数量',
					icon: 'none',
					duration: 2000
				});
				return;
			} else if (this.inputValue == null || this.inputValue == 0) {
				uni.showToast({
					title: '请输入核销数量',
					icon: 'none',
					duration: 2000
				});
				return;
			} else if (this.inputValue <= this.totalCount) {
				let remaining = parseInt(this.inputValue, 10);
				// 先按照 inboundBatch 排序
				this.listdata.data.sort((a, b) => a.inboundBatch.localeCompare(b.inboundBatch));
			
				// 创建一个新数组来存储被减去的对象以及减去的数量
				let deductedItems = [];
				// 创建一个新数组来存储剩余的对象
				let remainingItems = JSON.parse(JSON.stringify(this.listdata.data));
			
				// 遍历数组，减去 count 值
				for (let i = 0; i < remainingItems.length; i++) {
					if (remaining <= 0) break; // 如果没有剩余需要核销的数量，则退出循环
			
					let deductedCount = Math.min(remainingItems[i].count, remaining); // 计算此次将被减去的数量
					remainingItems[i].count -= deductedCount; // 减去 count 值
					remaining -= deductedCount; // 更新剩余需要核销的数量
			
					// 如果有被减去的数量，将对象添加到 deductedItems 数组
					if (deductedCount > 0) {
						deductedItems.push({ ...this.listdata.data[i], deductedCount }); // 使用原始数据对象，记录减去的数量
					}
				}
				// 更新 totalCount
				this.totalCount = remainingItems.reduce((sum, item) => sum + item.count, 0);
				console.log('剩余的对象数组:', remainingItems);
				// 修改二级库数量
				SecStockrApi.updateListSecStock(remainingItems)
				// 打印剩余的对象数组
				console.log('剩余的对象数组:', remainingItems);
				// 打印被减去的对象数组以及减去的数量
				console.log('被减去的对象数组及数量:', deductedItems);
				
				
				let aa = wareApi.creatToo(this.myObject)
				console.log('churuku bianhao',this.resultString)
				let data = deductedItems.map(item => {
				    return {
						affairs: "出库",
						affairsId: this.resultString,				 // 出入库编号
						productId:item.productId,                    // 产品编号
						productName:item.productName,                // 产品名称
						productUnit:item.productUnitId,              // 产品单位名称
						productUnitId:item.productUnitId,            // 产品单位编号
						productUnitName:item.productUnitName,        // 产品单位名称
						productCategoryId:item.productCategoryId,    // 产品分类编号
						productCategoryName:item.productCategoryName,// 产品分类名称
						productStandards:item.productStandards,      // 产品规格
						productPrice:0,                              // 销售价格
						productPurchasePrice:item.productPrice,      // 采购价格
						productBatch:item.productBatch,              // 产品批次
						inboundBatch:item.inboundBatch,              // 入库批次
						productValidityDate:item.productValidityDate,// 有效期
						count:item.deductedCount,                    // 数量
						remark:"免费产品核销",                        // 备注
						status:1
				    };
				});
				console.log('被减去的对象数组及数量:', data);
				let a = secAccountApi.createListSecAccount(data);
				// 返回上一层
				uni.navigateBack({
				    delta: 1
				});
			}	
		},
		    generateUUID() {
		      let d = new Date().getTime(); // 获取当前时间
		      const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
		        const r = (d + Math.random() * 16) % 16 | 0;
		        d = Math.floor(d / 16);
		        return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
		      });
		      return uuid.replace(/-/g, '').substring(0, 17); // 去掉 '-' 并截取前 17 位
		    },
		    generateString() {
		      const uuid = this.generateUUID();
		      this.resultString = `CKD${uuid}`;
			  this.myObject.out_id = this.resultString; 
		    }
		  
	  },
	};
	
	
	
</script>

<style>
.container {
  padding: 20px;
  background-color: #f5f5f5;
}

.info-card {
  background-color: #ffffff;
  border-radius: 8px;
  padding: 15px;
  margin-bottom: 15px;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}

.info-card.horizontal {
  display: flex;
  flex-direction: row;
  align-items: flex-start;
  justify-content: space-between;
}

.item-field {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
}

.label {
  font-size: 15px;
  color: #333333;
  margin-bottom: 5px;
}

.value {
  font-size: 13px;
  color: #007aff;
}

.button-container {
  margin-top: 20px;
  text-align: center;
}
</style>